﻿/*-------------------------------------------------------------------------
* 命名空间: XrayDirection.Services/ClipboardService
* 类       名: ClipboardService
* 功      能:  TD
* 时      间:  2023/12/28 17:47:50
* 版      本:  V1.0
* 作      者:  Fioman
* 格      言:  Talk is cheap,show me the code ^_^
*-------------------------------------------------------------------------*/
using System.IO;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Media.Imaging;
using XrayDirection.ImageManager;

namespace XrayDirection.Services
{
    public class ClipboardService : IClipboardService
    {
        /// <summary>
        /// 是否包含文本
        /// </summary>
        public bool HasText => Clipboard.ContainsText();

        /// <summary>
        /// 是否包含图像
        /// </summary>
        public bool HasImage => Clipboard.ContainsImage();

        /// <summary>
        /// 获取图像
        /// </summary>
        /// <returns></returns>
        public IBitmapImage GetImage() => new ImageHandler(Clipboard.GetImage());


        public string GetText() => Clipboard.GetText();


        public void SetImage(IBitmapImage image)
        {
            var pngStream = new MemoryStream();
            image.Save(pngStream, ImageFormats.Png);

            // 创建一个DataObject并将PNG流添加到其中
            var pngClipboardData = new DataObject("PNG", pngStream);

            // 对不支持PNG的应用程序添加一个备选方案
            // 在这种情况下,我们使用的是一个BitmapSource,它被更多的应用程序支持
            pngClipboardData.SetData(DataFormats.Bitmap, image, true);

            // 清空剪切板并将DataObject放到剪切板上
            Clipboard.Clear();
            Clipboard.SetDataObject(pngClipboardData, true);
        }

        public void SetText(string text)
        {
            if (string.IsNullOrEmpty(text))
                return;
            try
            {
                Clipboard.SetText(text);
            }
            catch (ExternalException ex)
            {
                MessageProvider.ShowException(ex, $"复制一下内容到剪切板失败: {text}\n,失败原因: {ex.Message}");
            }
        }
    }
}
